var origin;
var myOptions;
var map;
var origin_name;
var destination_name;
var help;
var database;
var dataId;
var data_origin_name;
var data_destination_name;

function initialize() {
	log("1");
//	db_test();
	log("2");
	dataId = 0;
	origin = new google.maps.LatLng(47.753550,8.936927); // Böhringen wird gewählt
	log("3");
	create_db();
	log("4");
	geo_start();
	myOptions = {
			zoom : 14,
			center : origin,
			navigationControl : false,
			mapTypeControl : false,
			scaleControl : false,
			mapTypeId: google.maps.MapTypeId.ROADMAP
	};
	drawMap();
};

window.log = function(message) {
	console.log?console.log(message):alert(message);
};

function db_test(){
	if (window.openDatabase) {
		// db geht in browser, lade datenbankskript
		document.write('<script src="js-files/without_db_script.js" type="text/javascript" ></script>');
		log("Datenbank wird geladen");
		//document.write("<script src=\"js-files/without_db_script.js\" type=\"text/javascript\" ></script>");		
	} else{
    	// db geht nicht in Browser, laden anderes skript
		log("Datenbank wird NICHT geladen");
		document.write("<script src=\"js-files/without_db_script.js\" type=\"text/javascript\" ></script>");
		document.write('<script src="js-files/without_db_script.js" type="text/javascript" ></script>');
	}
};

function drawMap() {
	map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
	log("drawMap wird aufgerufen");
};

function start(){
	myOptions.center = origin;
	drawMap();	
	log("start wird aufgerufen");
};

function route(){
	set_rout();
};

// testen ob geo an
function geo_start() {	
	if(navigator.geolocation){
		// geo ist an
		navigator.geolocation.getCurrentPosition(geoCallback, geoErrorCallback, {
			enableHighAccuracy: false,
			timeout: 120000
		});
	    log("geo ist an, der Aktuelle Ort wird als Start gewählt");
	}
	else{
		// geo ist aus,Böhringen wird gewählt
	    origin = new google.maps.LatLng(47.753550,8.936927);
	    log("geo ist aus, Böhringen wird als Start gewählt");
	}
};

// wenn geo erfolgreich
function geoCallback(position) {
	
    log("Position wurde ermittelt");

    // kann gelöscht werden
    // Böhringen wird gewählt
    // origin = new google.maps.LatLng(45.753550,5.936927); 
    
    var c = position.coords;   
    origin = new google.maps.LatLng(c.latitude, c.longitude);
    
    seach_name(origin, true);
    drawMap();
};

// wenn fehler bei geo-Bestimmung
function geoErrorCallback(error) {
    // Error	
	log("Fehler bei geo-Bestimmung");
	// origin = new google.maps.LatLng(47.753550,8.936927);
	switch (error.code){
		case error.PERMISSION_DENIED:
			break;
		case error.POSITION_UNAVAILABLE:
			break;
		case error.TIMEOUT:
			break;
		case error.UNKNOWN_ERROR:
			break;
	}
};

function set_rout() {   
	log("Ermittle Route");
	
	// ZielAdresse wird aus Eingabefeld gelesen
	var destination;
	destination = document.getElementById("inputName").value;
	
	//request objekt wird übergeben
    var request = {
    		origin: origin,									
            destination: destination,							 
            travelMode: google.maps.DirectionsTravelMode.DRIVING
    };
	
    //zeigt Eingegebene Stadt Auf Button an (zur besseren Verdeutlichung)
    document.getElementById("zeige").setAttribute("value", destination);
    	
    var dirDisplay = new google.maps.DirectionsRenderer();
        
    dirService = new google.maps.DirectionsService();
    dirDisplay.setMap(map);

    // result ist die antowrt wo zurückgegeben wird
    dirService.route(request, function(result, status) {
        	    
    // fehler behandlung
    switch(status) {
    	case google.maps.DirectionsStatus.OK:
    		// alles hat geklappt zeige result an
    		dirDisplay.setDirections(result);
            log("Route wurde berechnet und Angezeigt");
            break;
        case google.maps.DirectionsStatus.NOT_FOUND:
           	// fehler   
           	log("Your place was not found");
            break;
        case google.maps.DirectionsStatus.ZERO_RESULTS:
           	// fehler   
           	log("Zero results");
            break;
        default:
           	// fehler   
           	log("An unknown error occurred.");
            break;
       	}
   });
};

function seach_name(coordinates) {
	// Objekt in dem die Koordinaten stehen
	var request = {			 
			location: coordinates
    };
	
	// result ist die antowrt wo zurückgegeben wird
	var result;
	
	var search = new google.maps.Geocoder();
	if(coordinates == origin){
		log("Suche nach namen von Koordinaten von Start.");
		search.geocode(request, search_origin_name_callback(result, status));
		
	}else{
		log("Suche nach namen von Koordinaten von Ziel.");
		search.geocode(request, search_destination_name_callback(result, status));
	}
};

function search_origin_name_callback(result, status) {
	if(status == google.maps.DirectionsStatus.OK){
		origin_name = result;
		log("origin_name zugewiesen.");
	}else{
		error(status);
		log("origin_name konnte nicht besimmt werden!!!!!");
	}
};

function search_destination_name_callback(result, status) {
	if(status == google.maps.DirectionsStatus.OK){
		destination_name = result;
		log("destination_name zugewiesen.");
	}else{
		error(status);
		log("destination_name konnte nicht besimmt werden!!!!!");
	}
};

function error(status){	
	// fehler behandlung
	switch(status) {
		case google.maps.DirectionsStatus.OK:
			// Die Antwort enthält eine gültige GeocoderResponse.
			city_name = result;
			log("Die Antwort enthält eine gültige GeocoderResponse.");
			break;
		case google.maps.DirectionsStatus.INVALID_REQUEST:
			// Diese GeocoderRequest war ungültig. 
			log("Diese GeocoderRequest war ungültig.");
			break;
		case google.maps.DirectionsStatus.ZERO_RESULTS:
			// Für diese GeocoderRequest wurde kein Ergebnis gefunden.   
			log("Für diese GeocoderRequest wurde kein Ergebnis gefunden.");
			break;
		case google.maps.DirectionsStatus.ERROR:
			// Die Anfragebeschränkungen wurden von der Webseite in einem zu geringen Zeitraum überschritten.
			log("Die Anfragebeschränkungen wurden von der Webseite in einem zu geringen Zeitraum überschritten.");
			break;
		case google.maps.DirectionsStatus.OVER_QUERY_LIMIT:
			// Die Anfragebeschränkungen wurden von der Webseite in einem zu geringen Zeitraum überschritten.   
			log("Die Anfragebeschränkungen wurden von der Webseite in einem zu geringen Zeitraum überschritten.");
			break;
		case google.maps.DirectionsStatus.REQUEST_DENIED:
			// Es ist der Webpage nicht gestattet, den Geocoder zu verwenden.  
			log("Es ist der Webpage nicht gestattet, den Geocoder zu verwenden.");
			break;
		default:
			// fehler   
			log("An unknown error occurred." + status);
			break;
	}
};
